package RapiWeb;

import RapiWeb.Evento.JD_Opciones_Evento;
import RapiWeb.Objeto.CampoBD;
import RapiWeb.Objeto.Tabla;
import Componentes.C_MenuPestaña;
import Utilidades.Archivo;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JPanel;

public class JD_Opciones extends JDialog {

    private String str_TipoComponente[];
    private String str_Tablas[];
    private String str_Opciones[];
    private String str_Botones[];
    private String str_Label[];
    private String str_TextBox[];
    private String str_ComboBox[];
    private String str_CheckBox[];
    private String str_ListBox[];
    private String str_GridView[];
    private String str_Controles[];
    private ImageIcon ima_TextBox[];
    private JComboBox cbx_Opcion;
    private JComboBox cbx_TipoComponente;
    private JComboBox cbx_Tablas;
    private JComboBox cbx_Campo;
    private JButton btn_Aceptar;
    private JF_Principal principal;
    private int int_Fila;
    private int int_Columna;
    private CampoBD campoBD[];
    private Tabla tabla;
    private C_MenuPestaña m_Componente;
    private String str_Componente;
    private int i;
    private int j;

    public JD_Opciones(JF_Principal principal, int int_Fila, int int_Columna) {
        super(principal, "Agregar Componente");
        this.principal = principal;
        this.int_Fila = int_Fila;
        this.int_Columna = int_Columna;
//        setLocationRelativeTo(null);
        m_InicializarDatos();
        addComponenetes();
        setSize(570, 250);
        m_CentrarVentana();
        addEventos();
        setModal(true);
        setResizable(false);
        setVisible(true);
    }

    private void m_CrearCarpertas() {
        Archivo archivo = new Archivo();
        archivo.m_CrearCarpeta(principal.getStr_NomProyecto() + "/Componentes/Button");
        archivo.m_CrearCarpeta(principal.getStr_NomProyecto() + "/Componentes/Label");
        archivo.m_CrearCarpeta(principal.getStr_NomProyecto() + "/Componentes/TextBox");
        archivo.m_CrearCarpeta(principal.getStr_NomProyecto() + "/Componentes/ComboBox");
        archivo.m_CrearCarpeta(principal.getStr_NomProyecto() + "/Componentes/ListBox");
        archivo.m_CrearCarpeta(principal.getStr_NomProyecto() + "/Componentes/CheckBox");
        archivo.m_CrearCarpeta(principal.getStr_NomProyecto() + "/Componentes/GridView");
        archivo.m_CrearCarpeta(principal.getStr_NomProyecto() + "/Controles");
        archivo.m_CrearCarpeta(principal.getStr_NomProyecto() + "/Tablas");

    }

    private void m_InicializarDatos() {
        str_Opciones = new String[]{"Label", "TextBox", "Button", "ComboBox", "ListBox", "CheckBox", "GridView", "Controles"};
        m_CrearCarpertas();
        File f_Tabla = new File(principal.getStr_NomProyecto() + "/Tablas");
        File f_Controles = new File(principal.getStr_NomProyecto() + "/Controles");
        File f_Label = new File(principal.getStr_NomProyecto() + "/Componentes/Label");
        File f_Botones = new File(principal.getStr_NomProyecto() + "/Componentes/Button");
        File f_TextBox = new File(principal.getStr_NomProyecto() + "/Componentes/TextBox");
        File f_ListBox = new File(principal.getStr_NomProyecto() + "/Componentes/ListBox");
        File f_ComboBox = new File(principal.getStr_NomProyecto() + "/Componentes/ComboBox");
        File f_CheckBox = new File(principal.getStr_NomProyecto() + "/Componentes/CheckBox");
        File f_GridView = new File(principal.getStr_NomProyecto() + "/Componentes/GridView");
        str_Tablas = f_Tabla.list();
        str_Label = f_Label.list();
        str_Botones = f_Botones.list();
        str_TextBox = f_TextBox.list();
        str_ListBox = f_ListBox.list();
        str_ComboBox = f_ComboBox.list();
        str_CheckBox = f_CheckBox.list();
        str_GridView = f_GridView.list();
        str_Controles = f_Controles.list();

//        str_Opciones = new String[]{"Componentes", "Controles"};

    }

    private void addComponenetes() {
        JPanel panel = new JPanel();
        JPanel p_Sur = new JPanel();
        p_Sur.setLayout(new BorderLayout());
        panel.setLayout(new BorderLayout());
//        ima_TextBox= new ImageIcon[str_GridView.length];
//        for (int i=0;i<str_TextBox.length-1;i++){
//            String nombre=str_TextBox[i].replace(".xml", ".png");
//            try{
//                ima_TextBox[i]=new ImageIcon(getClass().getResource("/imagenes/"+nombre));
//            }catch(Exception ex){
//                ima_TextBox[i]=null;
//            }
//            
//        }
        m_Componente = new C_MenuPestaña(str_Opciones);
        m_Componente.addOpcionesMenu(0, str_Label);
//        m_Componente.addOpcionesMenu(1, str_TextBox, ima_TextBox, 3);
        m_Componente.addOpcionesMenu(1, str_TextBox);
        m_Componente.addOpcionesMenu(2, str_Botones);
        m_Componente.addOpcionesMenu(3, str_ComboBox);
        m_Componente.addOpcionesMenu(4, str_ListBox);
        m_Componente.addOpcionesMenu(5, str_CheckBox);
        m_Componente.addOpcionesMenu(6, str_GridView);
        m_Componente.addOpcionesMenu(7, str_Controles);
//        cbx_Opcion = new JComboBox(str_Opciones);
//        cbx_TipoComponente = new JComboBox();
        cbx_Tablas = new JComboBox(str_Tablas);
        cbx_Campo = new JComboBox();
        btn_Aceptar = new JButton("Aceptar");
        p_Sur.add(cbx_Campo, "Center");
        p_Sur.add(btn_Aceptar, "East");


        cbx_Tablas.setSelectedIndex(principal.getP_web().getCbx_Tabla().getSelectedIndex());
        m_CamposTabla();

//        m_ComboVisible(false);
//        panel.add(cbx_Opcion);

//        panel.add(cbx_TipoComponente);
        panel.add(cbx_Tablas, "North");
        panel.add(m_Componente, "Center");
        panel.add(p_Sur, "South");
        add(panel, "Center");
//        add(p_boton, "South");

    }

    private void m_CamposTabla() {
        tabla = new Tabla();
        Archivo archi = new Archivo();
        archi.m_LeerArchivo(principal.getStr_NomProyecto() + "/Tablas/" + cbx_Tablas.getSelectedItem());
        int int_Lineas = archi.getInt_TotalLineas();
        archi.m_LeerMultiTokens(principal.getStr_NomProyecto() + "/Tablas/" + cbx_Tablas.getSelectedItem(), 5, "=", int_Lineas);
        campoBD = new CampoBD[int_Lineas];
        cbx_Campo.removeAllItems();
        String str_Tabla = (String) cbx_Tablas.getSelectedItem();
        tabla.setStr_NomTabla(str_Tabla.replace(".txt", ""));
        tabla.setStr_NomEsquema("");
        for (int i = 0; i < archi.dameLinea_Separada().length; i++) {
            campoBD[i] = new CampoBD();
            campoBD[i].setStr_NomCampo(archi.dameLinea_Separada()[i].getStr_Palabras(0));
            campoBD[i].setStr_Tamaño(archi.dameLinea_Separada()[i].getStr_Palabras(2));
            campoBD[i].setStr_Tipo(archi.dameLinea_Separada()[i].getStr_Palabras(1));
            campoBD[i].setStr_Nulo(archi.dameLinea_Separada()[i].getStr_Palabras(3));
            campoBD[i].setStr_Ordenar(archi.dameLinea_Separada()[i].getStr_Palabras(4));
            cbx_Campo.addItem(campoBD[i].getStr_NomCampo());
        }
        tabla.setCamposBD(campoBD);
    }

    private void m_ComboVisible(boolean bol_Valor) {
        cbx_Tablas.setVisible(bol_Valor);
        cbx_Campo.setVisible(bol_Valor);
    }

    public String getStr_Componente() {
        return str_Componente;
    }

    public void setStr_Componente(String str_Componente) {
        this.str_Componente = str_Componente;
    }

    /**
     * Metodo para optener el prefijo adecuado
     *
     * @return str_Prefijo
     */
    public String m_Prefijo() {
        String str_Prefijo = "";
//        str_Opciones = new String[]{"Label", "TextBox", "Button", "Date", "ComboBox", "ListBox", "CheckBox", "GridView", "Controles"};
        String pestaña = m_Componente.getTitleAt(m_Componente.getSelectedIndex());
        if (pestaña.equals("Label")) {
            str_Prefijo = principal.getProyecto().getStr_Label();
        } else if (pestaña.equals("TextBox")) {
            str_Prefijo = principal.getProyecto().getStr_TextField();
        } else if (pestaña.equals("Button")) {
            str_Prefijo = principal.getProyecto().getStr_Button();
        } else if (pestaña.equals("Date")) {
            str_Prefijo = principal.getProyecto().getStr_TextField();
        } else if (pestaña.equals("ComboBox")) {
            str_Prefijo = principal.getProyecto().getStr_ComboBox();
        } else if (pestaña.equals("ListBox")) {
            str_Prefijo = principal.getProyecto().getStr_ListBox();
        } else if (pestaña.equals("CheckBox")) {
            str_Prefijo = principal.getProyecto().getStr_CheckBox();
        } else if (pestaña.equals("GridView")) {
            str_Prefijo = principal.getProyecto().getStr_GridView();
        } else if (pestaña.equals("Controles")) {
            str_Prefijo = "ctl";
        }

        return str_Prefijo;
    }

    private void addEventos() {
        btn_Aceptar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
//                String str_Componente = (String) cbx_TipoComponente.getSelectedItem();
                String str_CampoBD = (String) cbx_Campo.getSelectedItem();
//                String str_Pre = "" + str_Componente.charAt(0) + str_Componente.charAt(1) + str_Componente.charAt(2);
                JP_Tabla p_Estructura = principal.getP_web().getP_Estructura();
                p_Estructura.setVisible(false);
                p_Estructura.getBtn_Componente()[int_Fila][int_Columna].setText(m_Prefijo() + "_" + str_CampoBD);
//                principal.getP_Estructura().getInt_Tabla()[int_Fila][int_Columna] = cbx_TipoComponente.getSelectedIndex() + 1;
                p_Estructura.getComponente_Matrix()[int_Fila][int_Columna] = new Componente();
                p_Estructura.getComponente_Matrix()[int_Fila][int_Columna].m_AsignarCodigo(principal.getProyecto(), str_Componente, tabla, campoBD[cbx_Campo.getSelectedIndex()]);
                p_Estructura.setVisible(true);
                setVisible(false);
            }
        });

//        for (i = 0; i < m_Componente.getM_Opciones()[0].getOpciones().length; i++) {
//            m_Componente.getM_Opciones()[0].getOpcion(i).addActionListener(new JD_Opciones_Evento(JD_Opciones.this, m_Componente.getM_Opciones()[0].getOpcion(i), 0));
//        }
        for (i = 0; i < m_Componente.getM_Opciones().length; i++) {
            try {
                for (j = 0; j <= m_Componente.getM_Opciones()[i].getOpciones().length; j++) {
                    m_Componente.getM_Opciones()[i].getOpcion(j).addActionListener(new JD_Opciones_Evento(JD_Opciones.this, m_Componente.getM_Opciones()[i].getOpcion(j), 0));
                }
            } catch (Exception e) {
                System.out.println("Exception JD_Opciones.addEventos(): " + e.getMessage());
            }
        }

//        cbx_Opcion.addActionListener(new ActionListener() {
//            @Override
//            public void actionPerformed(ActionEvent e) {
//                File f_Opciones;
//                switch (cbx_Opcion.getSelectedIndex()) {
//                    case 0:
//                        f_Opciones = new File("Archivos/Componentes ASP");
//                        m_ComboVisible(true);
//                        break;
//                    case 1:
//                        f_Opciones = new File(principal.getStr_NomProyecto() + "/Controles");
//                        m_ComboVisible(false);
//                        break;
//                    default:
//                        f_Opciones = new File("Archivos/Componentes ASP");
//                }
//                str_TipoComponente = f_Opciones.list();
//                cbx_TipoComponente.removeAllItems();
//                for (int i = 0; i < str_TipoComponente.length; i++) {
//                    cbx_TipoComponente.addItem(str_TipoComponente[i]);
//                }
//            }
//        });
        cbx_Tablas.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                m_CamposTabla();
            }
        });
    }

    private void m_CentrarVentana() {
        int alto = principal.getHeight() - getHeight();
        int ancho = principal.getWidth() - getWidth();
        int x = principal.getX() + (ancho / 2);
        int y = principal.getY() + (alto / 2);
        this.setLocation(x, y);
    }

    public void m_QuitarColor() {
        for (i = 0; i < m_Componente.getM_Opciones().length; i++) {
            try {
                for (j = 0; j < m_Componente.getM_Opciones()[i].getOpciones().length; j++) {
                    m_Componente.getM_Opciones()[i].getOpcion(j).setBackground(null);
                }
            } catch (Exception e) {
                System.out.println("Exception JD_Opciones.m_QuitarColor(): " + e.getMessage());
            }
        }
    }
    
    
}
